[POWERPC][XEN] Add newlines on multiline output and dump SLB on SLB errors
authorJimi Xenidis <jimix@watson.ibm.com>
Fri, 15 Sep 2006 22:20:55 +0000 (18:20 -0400)
committerJimi Xenidis <jimix@watson.ibm.com>
Fri, 15 Sep 2006 22:20:55 +0000 (18:20 -0400)
Signed-off-by: Jimi Xenidis <jimix@watson.ibm.com>
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
xen/arch/powerpc/powerpc64/ppc970_machinecheck.c

index 67cf5d0b71864337319d0b066d878987db81508f..efd32459ea36b714d532cef0681297d43a60d742 100644 (file)
@@ -56,61 +56,65 @@ int cpu_machinecheck(struct cpu_user_regs *regs)
 
     printk("SRR1: 0x%016lx\n", regs->msr);
     if (regs->msr & MCK_SRR1_INSN_FETCH_UNIT)
-        printk("42: Exception caused by Instruction Fetch Unit (IFU) "
-               "detection of a hardware uncorrectable error (UE).\n");
+        printk("42: Exception caused by Instruction Fetch Unit (IFU)\n"
+               "    detection of a hardware uncorrectable error (UE).\n");
 
     if (regs->msr & MCK_SRR1_LOAD_STORE)
-        printk("43: Exception caused by load/store detection of error "
-               "(see DSISR)\n");
+        printk("43: Exception caused by load/store detection of error\n"
+               "    (see DSISR)\n");
 
     switch (regs->msr & MCK_SRR1_CAUSE_MASK) {
+    case 0:
+        printk("0b00: Likely caused by an asynchronous machine check,\n"
+               "see SCOM Asynchronous Machine Check Register\n");
+        break;
     case MCK_SRR1_CAUSE_SLB_PAR:
-        printk("0b01: Exception caused by an SLB parity error detected "
-               "while translating an instruction fetch address.\n");
+        printk("0b01: Exception caused by an SLB parity error detected\n"
+               "      while translating an instruction fetch address.\n");
         break;
     case MCK_SRR1_CAUSE_TLB_PAR:
-        printk("0b10: Exception caused by a TLB parity error detected "
-               "while translating an instruction fetch address.\n");
+        printk("0b10: Exception caused by a TLB parity error detected\n"
+               "      while translating an instruction fetch address.\n");
         break;
     case MCK_SRR1_CAUSE_UE:
-        printk("0b11: Exception caused by a hardware uncorrectable "
-               "error (UE) detected while doing a reload of an "
-               "instruction-fetch TLB tablewalk.\n");
-        break;
-    default:
+        printk("0b11: Exception caused by a hardware uncorrectable\n"
+               "      error (UE) detected while doing a reload of an\n"
+               "      instruction-fetch TLB tablewalk.\n");
         break;
     }
 
-    printk("\nDSIDR: 0x%08x\n", dsisr);
+    printk("\nDSISR: 0x%08x\n", dsisr);
     if (dsisr & MCK_DSISR_UE)
-        printk("16: Exception caused by a UE deferred error "
-               "(DAR is undefined).\n");
+        printk("16: Exception caused by a UE deferred error\n"
+               "    (DAR is undefined).\n");
     
     if (dsisr & MCK_DSISR_UE_TABLE_WALK)
-        printk("17: Exception caused by a UE deferred error "
-               "during a tablewalk (D-side).\n"); 
+        printk("17: Exception caused by a UE deferred error\n"
+               "    during a tablewalk (D-side).\n"); 
 
     if (dsisr & MCK_DSISR_L1_DCACHE_PAR)
-        printk("18: Exception was caused by a software recoverable "
-               "parity error in the L1 D-cache.\n");
+        printk("18: Exception was caused by a software recoverable\n"
+               "    parity error in the L1 D-cache.\n");
 
     if (dsisr & MCK_DSISR_L1_DCACHE_TAG_PAR)
-        printk("19: Exception was caused by a software recoverable "
-               "parity error in the L1 D-cache tag.\n");
+        printk("19: Exception was caused by a software recoverable\n"
+               "    parity error in the L1 D-cache tag.\n");
 
     if (dsisr & MCK_DSISR_D_ERAT_PAR)
-        printk("20: Exception was caused by a software recoverable parity "
-               "error in the D-ERAT.\n");
+        printk("20: Exception was caused by a software recoverable parity\n"
+               "    error in the D-ERAT.\n");
         
     if (dsisr & MCK_DSISR_TLB_PAR)
-        printk("21: Exception was caused by a software recoverable parity "
-               "error in the TLB.\n");
+        printk("21: Exception was caused by a software recoverable parity\n"
+               "    error in the TLB.\n");
 
-    if (dsisr & MCK_DSISR_SLB_PAR)
-        printk("23: Exception was caused by an SLB parity error (may not be "
-               "recoverable). This condition could occur if the "
-               "effective segment ID (ESID) fields of two or more SLB "
-               "entries contain the same value.");
+    if (dsisr & MCK_DSISR_SLB_PAR) {
+        printk("23: Exception was caused by an SLB parity error (may not be\n"
+               "    recoverable). This condition could occur if the\n"
+               "    effective segment ID (ESID) fields of two or more SLB\n"
+               "    entries contain the same value.\n");
+        dump_segments(0);
+    }
 
     return 0; /* for now lets not recover; */
 }